package com.example.clsj.service;

import cn.hutool.core.util.NumberUtil;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @author cy_
 * @date 2024/12/5
 */
@Slf4j
public class TuPuService {
    /**
     * 根据不同的图谱类型的文件名称获取采集原始结果的通用信息，如样品编号、检测项目名称、数据集编号等，文件名格式如下：
     * 非必填描述字段-(样品编号)-[检测项目名称]-#数据集编号$.pdf【示例：甲硝磋口腔片-(CP2020070151)-[QC含量检测]-#1$.pdf】
     * 非必填描述字段-(样品编号)-[检测项目名称]-#数据集编号-结果重复次数$.pdf【示例：甲硝锉口腔片-(CP2020070151)-[QC含量检测]-#1-1$.pdf】
     * 非必填描述字段-[检测项目名称]-#数据集编号$.pdf【示例：吐温80残留量-[吐温80标曲]-#1$.pdf】
     * 非必填描述字段-[检测项目名称]-#数据集编号-结果重复次数$.pdf【示例：吐温80残留量-[吐温80标曲]-#1-1$.pdf】
     *
     * @param sampleIdRequiredFlag 文件名称中的样品编号是否必填
     * @return 含通用信息的采集原始结果Map
     */
    private static Map<String, Object> getGeneralRawResultMapByFileName(String sourceFileName, boolean sampleIdRequiredFlag) {
        int sampleIdLeftIndex = sourceFileName.lastIndexOf("(");
        int sampleIdRightIndex = sourceFileName.lastIndexOf(")");
        String sampleId = null;
        if (sampleIdLeftIndex < 0 || sampleIdRightIndex < 0 || sampleIdLeftIndex > sampleIdRightIndex) {
            if (sampleIdRequiredFlag) {
                log.info("采集失败：图谱文件命名格式错误（无样品编号信息）");
                return null;
            }
        } else {
            sampleId = sourceFileName.substring(sampleIdLeftIndex + 1, sampleIdRightIndex);
        }

        int testNameLeftIndex = sourceFileName.lastIndexOf("[");
        int testNameRightIndex = sourceFileName.lastIndexOf("]");
        String testName = null; // 检测项目名称后续可以从采集模板中获取
        if (testNameLeftIndex >= 0 && testNameRightIndex >= 0 && testNameLeftIndex < testNameRightIndex) {
            testName = sourceFileName.substring(testNameLeftIndex + 1, testNameRightIndex);
        }

        int dataSetRepeatNoLeftIndex = sourceFileName.lastIndexOf("#");
        int dataSetRepeatNoRightIndex = sourceFileName.lastIndexOf("$");
        Long dataSetRepeatNo = 1L;
        Long repeatNo = 1L;

        // 如果文件名中维护了数据集重复次数则获取对应的数据集重复次数（数据集#），否则默认为1
        if (dataSetRepeatNoLeftIndex >= 0 && dataSetRepeatNoLeftIndex < dataSetRepeatNoRightIndex) {
            String dataSetNoAndRepeatNoStr = sourceFileName.substring(dataSetRepeatNoLeftIndex + 1, dataSetRepeatNoRightIndex);

            int splitIndex = dataSetNoAndRepeatNoStr.indexOf("-");
            if (splitIndex > -1) { // 存在间隔符"-"：#数据集编号-结果重复次数$
                String dataSetRepeatNoStr = dataSetNoAndRepeatNoStr.substring(0, splitIndex);
                String repeatNoStr = dataSetNoAndRepeatNoStr.substring(splitIndex + 1);

                if (!NumberUtil.isNumber(dataSetRepeatNoStr) || !NumberUtil.isNumber(repeatNoStr)) {
                    log.info("采集失败：图谱文件名中的数据集#与结果重复次数均需为数字");
                    return null;
                } else {
                    dataSetRepeatNo = NumberUtil.parseLong(dataSetRepeatNoStr);
                    repeatNo = NumberUtil.parseLong(repeatNoStr);
                }
            } else { // 不存在间隔符，只存在数据集#
                if (!NumberUtil.isNumber(dataSetNoAndRepeatNoStr)) {
                    log.info("采集失败：图谱文件名中的数据集#需为数字");
                    return null;
                } else {
                    dataSetRepeatNo = NumberUtil.parseLong(dataSetNoAndRepeatNoStr);
                }
            }
        }

        Map<String, Object> generalRawResultMap = new HashMap<>();
        generalRawResultMap.put("sampleId", sampleId);
        generalRawResultMap.put("testName", testName);
        generalRawResultMap.put("dataSetRepeatNo", dataSetRepeatNo);
        generalRawResultMap.put("repeatNo", repeatNo);
        return generalRawResultMap;
    }
//
//    // 获取源文件内容信息
//    private List<String> read() {
//        if (StringUtils.isEmpty(getAcqRecord().getAcqRawData())) {
//            return new ArrayList<>();
//        }
//        return Arrays.asList(StringUtils.split(getAcqRecord().getAcqRawData(), "\n"));
//    }
//
//    private CoreEquiptAcqRecordBean getAcqRecord() {
//        return PqEquiptFileReadingDataHolder.getCurrentData();
//    }


    public static void main(String[] args) {

    }
}
